<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
<!-- 
    nodejs是基于chrome v8引擎的JavaScript运行时
    nodejs可以让JS在服务端运行，可以使用JS来开发服务端程序
    nodejs的三大特征：单线程、非阻塞I/O、事件驱动

    前端使用：使用nodejs的运行环境来运行一些配置文件，以及安装管理依赖包
    后端使用：使用nodejs来提供JS在服务端的运行环境，使用JS来开发后端程序，为前端提供数据接口

    在nodejs中运行JS脚本：
    1.在命令窗口输入 node 回车，进入一种交互模式，可以直接输入JS脚本并执行
    2.将js脚本写在js文件中，并执行 node xxx.js

    注意：在nodejs中不能操作window对象和document对象

    NPM 包管理工具
    npm是随着nodejs一起安装的包管理工具
    npm可以帮助我们记录管理项目的依赖包

    NPM常用命令：
    npm init -y 初始化项目并生成 package.json 文件

    安装项目依赖包：
    npm install 包名
    npm install 包名 --save
    npm install 包名 -save
    npm i 包名
    npm i 包名 -S

    安装开发依赖包：
    npm install 包名 --save-dev
    npm install 包名 -save-dev
    npm i 包名 -D

    安装全局依赖包：
    npm install 包名 --global
    npm i 包名 -g

    安装项目所有依赖包：
    npm install
    npm i

    卸载依赖包：
    npm uninstall 包名
    npm uninstall 包名 -S
    npm uninstall 包名 -D

    更新依赖包：
    npm update 包名

    其他：
    npm i -D 包名1 包名2  可以一次安装多个包
    npm i 包名@版本号  安装指定版本的包

    定义脚本命令：
    "script": {
        "test": "node xxx.js",
        "hehe": "node xxx.js",
    }
    npm run test -> node xxx.js
    npm test -> node xxx.js
    npm run hehe -> node xxx.js

    yarn 包管理工具
    npm i yarn -g  全局安装yarn

    安装项目依赖：
    yarn add 包名
    yarn add 包名 --save
    yarn add 包名 -S

    安装开发依赖：
    yarn add 包名 --dev
    yarn add 包名 -D

    安装全局依赖：
    yarn add 包名 -g

    安装所有依赖：
    yarn
    yarn install

    卸载依赖：
    yarn remove 包名

    更新依赖：
    yarn upgrade 包名

    安装指定版本依赖：
    yarn add 包名@版本号

    定义脚本命令：
    "script": {
        "test": "node xxx.js",
        "hehe": "node xxx.js",
    }
    yarn run test -> node xxx.js
    yarn run hehe -> node xxx.js

    模块化
    模块化是一种开发思想，将一个大的应用程序拆分成多个组成部分
    每一个js文件就是一个模块
    模块拥有独立的作用域，模块内部的类、函数、变量等对外不可见
    nodejs中的应用程序都是由各种模块组成的

    nodejs中的模块：
    1.内置模块（安装完nodejs后可以直接使用的模块）
    2.第三方模块（使用npm安装的模块）
    3.自定义模块（自己写的模块）

    commonjs模块规范
    nodejs使用的是commonjs模块规范
    使用 require() 加载执行模块
    require()加载到的是模块的 module.exports 属性
    每一个模块内部都有一个module对象，module.exports就是模块对外暴露的内容
    隐藏关系：let exports = module.exports
    exports.num = result

    注意点：
    1.同一个模块可以加载多次，但只有第一次执行
    2.加载多个模块时，模块的执行顺序按照书写顺序依次执行（同步）
 -->

</body>
</html>